package com.zyb.lmbackend.util;

import java.text.Normalizer;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

/**
 * 文本清洗工具：去控制符、归一化、合并重复词、压缩空白并限长。
 */
public final class TextSanitizer {
    private TextSanitizer() {}

    /** 清洗单条文本。 */
    public static String sanitize(String input) {
        if (input == null) return "";
        String s = input;
        // 去控制符
        s = s.replaceAll("[\\p{Cntrl}]", " ");
        // 全角转半角（粗略：Unicode NFKC 归一化）
        s = Normalizer.normalize(s, Normalizer.Form.NFKC);
        // 重复词合并（简单规则：重复连续词合并为一次）
        s = s.replaceAll("(\\b[\\p{L}\\p{N}]{1,20}\\b)(\\s*\\1)+", "$1");
        // 空白压缩
        s = s.trim().replaceAll("\\s+", " ");
        // 限长 200 字符
        if (s.length() > 200) s = s.substring(0, 200);
        return s;
    }

    /** 清洗并按保持出现顺序去重。 */
    public static List<String> sanitizeAndDedupe(List<String> inputs) {
        Set<String> set = new LinkedHashSet<>();
        for (String s : inputs) {
            String t = sanitize(s);
            if (!t.isBlank()) set.add(t);
        }
        return new ArrayList<>(set);
    }
}
